package com.are.odisea;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class AnularOrden
 */
@WebServlet("/SrvAnularOrden")
public class SrvAnularOrden extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public SrvAnularOrden() {
		super();
		// TODO Auto-generated constructor stub
	}

	protected void ProcesarPeticion(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=ISO-8859-1");
		PrintWriter out = response.getWriter();
		
		HttpSession sesion = request.getSession();
		if (sesion.getAttribute("usuario") == null) {
			out.print("La sesion ha caducado... intente de nuevo por favor");
			return;
		}

		String usuario = (String) sesion.getAttribute("usuario");

		db conexion = null;

		String operacion = (String) request.getParameter("operacion");
		try {
			
			if (operacion.equals("mantenimiento")) {
				conexion = new db();
				String id = (String)request.getParameter("id");  // id del reporte de la bandeja
				String nota = (String)request.getParameter("nota");  // id del reporte de la bandeja
				System.out.println("Id de la orden: " + id);
				GestionBandeja gb = new GestionBandeja(conexion);
				BandejaReporte br = new BandejaReporte();
				if (gb.FindOrdenReporte(Integer.parseInt(id))) {
					br = gb.getOrdenbandeja();
					GestionConsumos gc = new GestionConsumos(conexion);
					if (gc.AnularConsumos(br.getOrden(), GestionConsumos.TIPO_ORDEN_MANTENIMIENTO, GestionConsumos.COMMIT_OFF)) {
						if (gb.RemoveReporteBandeja(br.getId(), GestionBandeja.COMMIT_OFF)) {
							AnularOrden anular = new AnularOrden(conexion);
							anular.setUsuario(usuario);
							if (anular.AnularOrdenMantenimiento(br.getOrden(), nota, AnularOrden.COMMIT_OFF)) {
								conexion.Commit();
								out.print("OK");
							}else {
								throw new SQLException("Error actualizar estado de la orden de servicio " + br.getOrden());
							}
						}else {
							throw new SQLException("Error eliminar reporte de orden en la bandeja ID " + br.getId());
						}
						
					}else {
						throw new SQLException("Error al anular los consumos reportados");
					}
					
				}else {
					throw new SQLException("Error al consultar la orden en la bandeja de reportes");
				}
				
				
				
			}

			
			if (operacion.equals("instalacion")) {

			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			out.println("Error de conexion. " + e.getMessage());
		} finally {
			if (conexion != null) {
				try {
					conexion.Close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					out.println("Error de conexion. " + e.getMessage());
				}
			}
		}

	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.ProcesarPeticion(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.ProcesarPeticion(request, response);
	}

}
